#!/bin/bash
stty sane
stty erase ^H
# 定义用户及其 SHA-256 加密密码和有效期
# 格式：["用户名"]="密码哈希|创建日期(YYYY-MM-DD)|有效月数"
# 有效月数为0表示密码长期有效
declare -A users=(
["dsm100"]="4c9cd061b55b6cdd816720fb5e0e23492c28b1a025907e376884a125e461b7ad|2025-04-18|12"  # SHA-256 加密值已经使用
["dsm101"]="c4bba4f060a1dcbe87fa0e937253204543118b055e280ecc7d9d3f1a35c71a0a|2025-04-17|12"  # SHA-256 加密值weixin_58494016已经使用
["dsm102"]="303eada2b1f29f905f4876d093591afd4ca2f3f2ad63d185f19fde9476c563da|2025-04-18|12"  # SHA-256 加密值xy078已经使用
["dsm103"]="d274004be938ebc9e968ef072d3d426eeb0697b5b96b7f4e819d97fc845496b3|2025-04-18|12" 
["dsm104"]="255d671272c17b08508c59e84b9cf6117921738a281f8eb7538ae01c3cdf90e9|2025-04-18|12" 
["dsm105"]="6607a86a2fc0bbfa886238188d63237d8b59b9b7a57f2510cf72e9197e69bc55|2025-04-18|12"
["dsm106"]="cc1a02649788c6567fce58ebebbb9907c67c2fcd5d531da1daaa53efffce16b6|2025-04-18|12"
["dsm107"]="c2f09183b0ec0310f976863fd120726c246a1c16d7d7590ef554329ef7fb74b2|2025-04-18|12"
["dsm108"]="1f8e303a9ac924fee97cd7be27ef7b1ff357c4cf774162a55d496d4678b50ff0|2025-04-18|12"
["dsm109"]="73d2f1de8f9b4165451804d4ea94d697e61741e3020b26c4af0eb5eb5422eb3d|2025-04-18|12"
["dsm110"]="6d4b06d743fcf6af9d456f5e070c5e53d6f6fe803ab8982e6665c92bbce0ba11|2025-04-18|12"
["dsm111"]="8f5ddfbb74faef1a3419a483d78d754e5bd9e90a966d291b75a037b0c0777325|2025-04-18|12"
["dsm112"]="f6f11b9384d9a44630a72bfea510ac480eb923bf803554acbeef629c6a79797e|2025-04-18|12" 
["dsm113"]="797385f131cd07128d3478f9248671a28edc52440466c387a1aecd5411790aa9|2025-04-18|12"
["dsm114"]="ba22e3ad46ec889c34930536a8a827eae3613987b51e6369b9ccc0e4686b333b|2025-04-18|12"
["dsm115"]="97258dc8e1c855d4d993f89f95187c33f0c9573c27cca6a302ac637037e9d28b|2025-04-18|12" 
["dsm116"]="0fa735772fc0ef056ad5565b98f436eb1127c0be21aa20f87e884c3d1ab1707a|2025-04-18|12" 
["dsm117"]="4ef0831d71ec19c45f3c26823c88954b4f6a85b2db23de6f1e99c022c77c3c74|2025-04-18|12"
["dsm118"]="9f45b52d16da64c49c464f7cd6fc6042430cc368553bc044eef31691eaaa59c1|2025-04-18|12"
["dsm119"]="4a8d6a30e9d3cef236190059f97ee8137a7838963b66f6209d5b282cc46bba38|2025-04-18|12"
)

# 配置文件路径
CONFIG_DIR="/etc/auth_system"
CONFIG_FILE="$CONFIG_DIR/dsmuser_config.txt"

# 创建配置目录（如果不存在）
mkdir -p "$CONFIG_DIR"

# 检查密码是否过期
check_password_expiry() {
    local username=$1
    local user_info=${users[$username]}
    
    # 分割用户信息
    IFS='|' read -ra parts <<< "$user_info"
    local hashed_password=${parts[0]}
    local create_date=${parts[1]}
    local valid_months=${parts[2]}
    
    # 如果有效月数为0，则密码长期有效
    if [[ $valid_months -eq 0 ]]; then
        return 0
    fi
    
    # 计算过期日期
    local expire_date=$(date -d "$create_date + $valid_months months" +%Y-%m-%d)
    local today=$(date +%Y-%m-%d)
    
    # 比较日期
    if [[ $today > $expire_date ]]; then
        echo "密码已过期！请更换密码。"
        return 1
    else
        echo "密码有效期至: $expire_date"
        return 0
    fi
}

# 检测是否已配置用户和密码
check_config() {
    if [[ -f "$CONFIG_FILE" ]]; then
        local saved_username=$(awk -F= '/username/{print $2}' "$CONFIG_FILE")
        local saved_password_hash=$(awk -F= '/password_hash/{print $2}' "$CONFIG_FILE")
        local saved_create_date=$(awk -F= '/create_date/{print $2}' "$CONFIG_FILE")
        local saved_valid_months=$(awk -F= '/valid_months/{print $2}' "$CONFIG_FILE")

        if [[ -n "$saved_username" && -n "$saved_password_hash" ]]; then
            # 检查用户是否存在
            if [[ -n "${users[$saved_username]}" ]]; then
                # 获取存储的用户信息
                local user_info=${users[$saved_username]}
                IFS='|' read -ra parts <<< "$user_info"
                local stored_hash=${parts[0]}
                
                # 验证密码哈希
                if [[ "$stored_hash" == "$saved_password_hash" ]]; then
                    # 检查密码有效期
                    if check_password_expiry "$saved_username"; then
                        echo "检测到已配置用户：$saved_username，跳过登录验证。"
                        return 0
                    else
                        echo "密码已过期，需要重新登录。"
                        return 1
                    fi
                else
                    echo "配置文件中密码不匹配，需要重新登录。"
                    return 1
                fi
            else
                echo "配置文件中用户不存在，需要重新登录。"
                return 1
            fi
        else
            echo "配置文件不完整，需要登录。"
            return 1
        fi
    else
        echo "未检测到配置文件，需要登录。"
        return 1
    fi
}

# 用户登录验证函数
login() {
    local username
    local password
    local hashed_password

    read -p "请输入用户名: " username
    read -p "请输入密码: " password
    echo

    # 检查用户是否存在
    if [[ -z "${users[$username]}" ]]; then
        echo "用户名不存在！"
        return 1
    fi
    
    # 获取用户信息
    local user_info=${users[$username]}
    IFS='|' read -ra parts <<< "$user_info"
    local stored_hash=${parts[0]}
    
    # 计算输入密码的哈希值
    hashed_password=$(echo -n "$password" | sha256sum | awk '{print $1}')

    # 验证密码
    if [[ "$stored_hash" == "$hashed_password" ]]; then
        # 检查密码有效期
        if check_password_expiry "$username"; then
            echo "登录成功！"
            update_config "$username" "$hashed_password"
            return 0
        else
            return 1
        fi
    else
        echo "密码错误！"
        return 1
    fi
}

# 更新配置文件
update_config() {
    local username="$1"
    local hashed_password="$2"
    local user_info=${users[$username]}
    
    IFS='|' read -ra parts <<< "$user_info"
    local create_date=${parts[1]}
    local valid_months=${parts[2]}
    
    echo "username=$username" > "$CONFIG_FILE"
    echo "password_hash=$hashed_password" >> "$CONFIG_FILE"
    echo "create_date=$create_date" >> "$CONFIG_FILE"
    echo "valid_months=$valid_months" >> "$CONFIG_FILE"
}

# 主菜单
main_menu() {
    echo "请选择要执行的操作："
    echo "1. openwrt设置定时关闭esxi"
    echo "2. 查看esxi,硬盘信息位置"
    echo "3. 更新其它（未定）"
    echo "4. 退出"
}

# 执行操作
execute_operation() {
    case $1 in
        1)
            echo "openwrt设置定时关闭esxi"
            bash -c "$(curl -fsSL https://gitee.com/banban1000/esxi/raw/master/sh/openwrtseting_off_esxi.sh)"
            exit 0
            ;;
        2)
            echo "查看esxi,硬盘信息位置"
            bash -c "$(curl -fsSL https://gitee.com/banban1000/esxi/raw/master/sh/disk_placement.sh)"
            exit 0
            ;;
        3)
            echo "正在更新其它..."
            exit 0
            ;;
        4)
            echo "退出程序。"
            exit 0
            ;;
        *)
            echo "无效选项，请重新选择。"
            ;;
    esac
}

# 主程序
if check_config; then
    echo "已通过配置文件验证。"
else
    echo "需要登录验证。"
    if ! login; then
        echo "登录失败，程序退出。"
        exit 1
    fi
fi

while true; do
    main_menu
    read -p "请输入选项编号: " choice
    execute_operation "$choice"
done